package cc.fengz.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.IOUtils;

/**
 * 文件MD5
 * 
 * @author lfzxs@qq.com
 * 
 */
public class FileMd5 {

	public static String getMd5ByFile(File file) throws FileNotFoundException {
		String value = null;
		FileInputStream in = new FileInputStream(file);
		try {
			MappedByteBuffer byteBuffer = in.getChannel().map(
					FileChannel.MapMode.READ_ONLY, 0, file.length());
			MessageDigest md5 = MessageDigest.getInstance("MD5");
			md5.update(byteBuffer);
			BigInteger bi = new BigInteger(1, md5.digest());
			value = bi.toString(16);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (null != in) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return value;
	}

	public static String getMd5ByFile(String path) throws FileNotFoundException {
		return getMd5ByFile(new File(path));
	}


	public static String getMd5ByInputStream(InputStream in) throws IOException {
		String result = null ;
		result = DigestUtils.md5Hex(IOUtils.toByteArray(in));
		return result ;
	}

	public static void main(String[] args) throws IOException {

		String path = "F:\\TDDOWNLOAD\\开发包\\java\\commons-codec-1.9-bin.zip";

		String v = getMd5ByFile(new File(path));
		System.out.println("MD5:" + v.toUpperCase());

		FileInputStream fis = new FileInputStream(path);
		String strmd5 = FileMd5.getMd5ByInputStream(fis) ;
//		fis.skip(-1) ;
//		String strmd5 = FileMd5.getMd5ByInputStream(fis) ;
//		String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
		IOUtils.closeQuietly(fis);
		//System.out.println("MD5:" + md5);
		System.out.println("strmd5:" + strmd5);
		

		
		
		
		
		// 90506d869e65e896d5a8474b00097610
		// MD5:90506d869e65e896d5a8474b00097610
		// System.out.println("MD5:"+DigestUtils.md5Hex("WANGQIUYUN"));
	}

}
